#include<cstdio>
#include<cstring>
#include<algorithm>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long LL;
typedef double db;
inline int read()
{
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9') { if(ch=='-')f=-1; ch=getchar(); }
	while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+ch-'0'; ch=getchar(); }
	return x*f;
}
const int MAXN=210;
int n,m[5],f[MAXN][MAXN][5],mp[256];
char a[MAXN],b[5][20][3];
int dfs(int l,int r,int k)
{
	if(~f[l][r][k])return f[l][r][k];
	f[l][r][k]=0;
	for(int i=l;i<r;++i)
		for(int j=1;j<=m[k];++j)
			f[l][r][k]|=(dfs(l,i,mp[b[k][j][1]])&&dfs(i+1,r,mp[b[k][j][2]]));
	return f[l][r][k];
}
int main()
{
	for(int i=1;i<=4;++i)m[i]=read();
	mp['W']=1;mp['I']=2;mp['N']=3;mp['G']=4;
	for(int i=1;i<=4;++i)
		for(int j=1;j<=m[i];++j)
			scanf("%s",b[i][j]+1);
	scanf("%s",a+1);n=strlen(a+1);
	memset(f,-1,sizeof(f));
	for(int i=1;i<=n;++i)f[i][i][mp[a[i]]]=true;
	for(int i=1;i<=4;++i)dfs(1,n,i);
	if(!f[1][n][1]&!f[1][n][2]&!f[1][n][3]&!f[1][n][4])puts("The name is wrong!");
	else
	{
		if(f[1][n][1]==1)printf("W");
		if(f[1][n][2]==1)printf("I");
		if(f[1][n][3]==1)printf("N");
		if(f[1][n][4]==1)printf("G");
		puts("");
	}
	return 0;
}
